#include <iostream>
#include <cstdlib>
#include "menu.h"
using namespace std;

int main()
{
    int fom;
    string urit;
    Menu menu;
    do{
        cout << "Xml-editor" << endl << endl;
        cout << "1. Dokumentum Betoltese"<< endl;
        cout << "2. Uj ures dokumentum"<< endl;
        cout << "3. Ki lepes"<< endl;

        bool l;
        do{
            cin >> fom;
            l = (cin.fail() || fom < 1 || fom > 3);
            if (l){
                cout << "Nem letezik ilyen menu pont!" << endl;
                cin.clear(); string tmp; getline(cin,tmp,'\n');
            }
        }while(l); getline(cin,urit);
        system("CLS");

        if (fom != 3){
            string fnev;
            cout << "Adja meg a fajl nevet es eleresi utvonalat: ";
            cin >> fnev;
            if(fom == 1){
                try{
                    menu.betoltes(fnev);
                }catch(Menu::Exceptions e){
                    switch(e){
                        case Menu::OPEN_ERROR: system("CLS");
                            cout << "A megadott fajl nem letezik!" << endl << endl;
                            continue; break;
                        case Menu::MISSDEK:  system("CLS");
                            cout << "A dokumentumnak deklaraciovall kell kezdodnie!" << endl << endl;
                            menu.szerveg();
                            continue; break;
                        case Menu::WRONG_CLOSE:  system("CLS");
                            cout << "Kerem zarjon le minden tag-et a dokumentumban!" << endl << endl;
                            menu.szerveg();
                            continue; break;
                        case Menu::WRONG_DEK:  system("CLS");
                            cout << "A dokumentum csak egy deklaraciot tartalmazhat!" << endl << endl;
                            menu.szerveg();
                            continue; break;
                        case Menu::PROT_CHAR:  system("CLS");
                            cout << "A Tagek nemtartalmazhatnak vedett karaktereket ('<','>') !" << endl << endl;
                            menu.szerveg();
                            continue; break;
                    }
                }catch (Tagkezelo::Exceptions e){
                    if(e == Tagkezelo::MISS_EQ){
                        cout << "Rossz atributum megadas (Hianyzik az egyenlosegjel)!" << endl << endl;
                        menu.szerveg();
                        continue; break;
                    }else if(e == Tagkezelo::MISS_CAT){
                        cout << "Rossz atributum megadas (valahol hianyzik az idezojel masik fele)!" << endl << endl;
                        menu.szerveg();
                        continue; break;
                    }else if (e == Tagkezelo::WRONG_CLOSE){
                        cout << "Folosleges zaro tag!" << endl << endl;
                        menu.szerveg();
                        continue; break;
                    }
                }
            }else{
                menu.ujdokumentum(fnev);
            }
            system("CLS");

            int am;
            do{
                cout << endl << "Menu" << endl << endl;
                cout << "1. Uj Tag"<<endl;
                cout << "2. Tag modositasa"<< endl;
                cout << "3. Tag torlese" << endl;
                cout << "4. Navigalas" << endl;
                cout << "5. Akt. Tag kiirasa" << endl;
                cout << "6. Mentes"<< endl;
                cout << "7. Szerekesztes vege"<< endl;


                do{
                    cin >> am;
                    l = (cin.fail() || am < 1 || am > 7);
                    if (l){
                        cout << "Nem letezik ilyen menu pont!" << endl;
                        cin.clear(); string tmp; getline(cin,tmp,'\n');
                    }
                }while(l); getline(cin,urit);

                system("CLS");

                switch(am){
                    case 1:
                        try{
                            menu.ktagebe();
                        }catch (Tagkezelo::Exceptions e){
                            if(e == Tagkezelo::NGY){
                                cout << "Az aktualis tag nem Elem ezert nemtudunk uj gyerekeket hozza adni." << endl << endl;
                            }else if(e == Tagkezelo::MISS_EQ){
                                cout << "Rossz atributum megadas (Hianyzik az egyenlosegjel)!" << endl << endl;
                            }else if(e == Tagkezelo::MISS_CAT){
                                cout << "Rossz atributum megadas (valahol hianyzik az idezojel masik fele)!" << endl << endl;
                            }else if (e == Tagkezelo::WRONG_CLOSE){
                                cout << "Folosleges zaro tag!" << endl << endl;
                            }
                        }catch (Menu::Exceptions e){
                            if (e == Menu::WRONG_CLOSE){
                                cout << "Kerem zarjon le minden megadott tag-et" << endl << endl;
                            }
                        }
                    break;

                    case 2: menu.tagmodsitasa(); break;
                    case 3: menu.tagtorlese(); break;
                    case 4: menu.navigal(); break;
                    case 5: menu.aktkiir(); break;
                    case 6: menu.mentes(); break;
                    case 7: menu.szerveg(); break;
                }
            }while(am != 7);

        }



    }while (fom != 3);
    return 0;
}
